package com.yuanzhi.train.tree;

/**
 * 给定二叉树的根节点 root ，返回所有左叶子之和。
 *
 * 示例 1：
 * 输入: root = [3,9,20,null,null,15,7]
 * 输出: 24
 * 解释: 在这个二叉树中，有两个左叶子，分别是 9 和 15，所以返回 24
 *
 * 示例 2:
 * 输入: root = [1]
 * 输出: 0
 *
 *
 * 提示:
 *
 * 节点数在 [1, 1000] 范围内
 * -1000 <= Node.val <= 1000
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/sum-of-left-leaves
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * @author yuanZhi
 * @since 2022/2/17 15:13
 */
public class SumOfLeftLeaves {
    public static void main(String[] args) {
        TreeNode tree = new TreeNode(1, new TreeNode(2), new TreeNode(3));
        TreeNode tree1 = new TreeNode(3, new TreeNode(9), new TreeNode(20, new TreeNode(15), new TreeNode(7)));
        System.out.println(sumOfLeftLeaves(tree));
        System.out.println(sumOfLeftLeaves(tree1));
    }

    private static int sumOfLeftLeaves(TreeNode root){
        return loop(root, false);
    }
    private static int loop(TreeNode root, boolean isLeft){
        int sum = 0;
        if (root == null){
            return sum;
        }
        if (root.left == null && root.right == null && isLeft) {
            sum += root.val;
        }

        sum += loop(root.left, true);
        sum += loop(root.right, false);
        return sum;
    }
}
